#pragma once 

#ifdef __cplusplus
extern "C" {
#endif

#include "esp_types.h"
#include "esp_event.h"
#include "esp_err.h"
#include "dwm_api.h"
#define UWB_CONFIG_DEFALT()      	\
{									\
	.cfg_tag ={						\
			.common ={				\
			.uwb_mode=1,			\
			.fw_update_en=1,		\
			.ble_en=1,				\
			.led_en=1,				\
			.enc_en=1				\
			},						\
			.loc_engine_en =1,		\
			.low_power_en =1,		\
			.stnry_en =1,			\
			.meas_mode = 1			\
	},								\
	.update_rate = 1,				\
	.update_rate_stationary =1,		\
	.panid = 1,						\
	.label = "219f"					\
}
/**
 * @brief Declare of UWB Event base
 *
 */
//ESP_EVENT_DECLARE_BASE(ESP_UWB_EVENT);
const char* ESP_UWB_EVENT;
typedef struct{
	dwm_pos_t pos;

}uwb_t;
typedef enum{
	UWB_UPDATE,
	UWB_NOT_UPDATE
}uwb_event_id_t;
/**
 * @brief UWB组件句柄
 */
typedef void *uwb_handle_t;

/**
 * @brief UWB组件配置信息
 */
typedef struct {
    dwm_cfg_tag_t cfg_tag;
    int16_t update_rate;
    int16_t update_rate_stationary;
    uint16_t panid;
    const char *label;
} uwb_config_t;

/**
 * @brief UWB组件初始化
 * 
 * @param config UWB配置信息
 * @return uwb_handle_t UWB句柄
 */
uwb_handle_t uwb_init(const uwb_config_t *config);

/**
 * @brief UWB组件解初始化
 * 
 * @param uwb_hdl UWB句柄
 * @return esp_err_t 操作结果
 */
void uwb_deinit(uwb_handle_t uwb_hdl);

/**
 * @brief 注册UWB事件处理函数
 * 
 * @param uwb_hdl UWB句柄
 * @param event_handler 事件处理函数
 * @param handler_args 事件处理函数参数
 * @return esp_err_t 操作结果
 */
esp_err_t uwb_add_handler(uwb_handle_t uwb_hdl, esp_event_handler_t event_handler, void *handler_args);

/**
 * @brief 移除UWB事件处理函数
 * 
 * @param uwb_hdl UWB句柄
 * @param event_handler 事件处理函数
 * @return esp_err_t 操作结果
 */
esp_err_t uwb_remove_handler(uwb_handle_t uwb_hdl, esp_event_handler_t event_handler);
typedef struct {
	uwb_t parent;
	uint8_t *buffer;
	const char *label;
	esp_event_loop_handle_t event_loop_hdl;
	TaskHandle_t uwb_tsk_hdl;

} esp_uwb_t;

#ifdef __cplusplus
}
#endif
